package com.bocloud.service;

import com.bocloud.mapper.*;
import com.bocloud.model.*;
import com.github.pagehelper.PageHelper;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Created by Administrator on 2018/12/16.
 */
@Service
public class UserServiceImp implements UserService{

    Logger log = Logger.getLogger(UserServiceImp.class);

    @Autowired
    private UserMapper userMapper;

    /**
     * 用途：查询用户表中的所有数据，并分页显示
     *  参数: currPage 当前页数 Page_size 每页的条数
     * 使用方法：先判断当前页数是否为空，是则赋值1；查询用户表的总条数，计算出总页数
     */
    @Override
    public Pagination getAllUsers(Integer currPage,Integer Page_size) {
        if (currPage ==null)
            currPage=1;
        Pagination pagination = new Pagination();
        pagination.setCurrPage(currPage);
        pagination.setPAGE_SIZE(Page_size);
        try{
        pagination.setTotalCount(this.userMapper.selCount());
        }catch (Exception e){
            log.error(e.getMessage());
        }
        pagination.init();
        PageHelper.startPage(currPage,Page_size);
        try {
            pagination.setData(this.userMapper.getAll());
        }catch (Exception e){
            log.error(e.getMessage());
        }
        return pagination;
    }

    /**
     * 用途：根据用户名和密码进行模糊查询，并分页显示
     * 参数:currPage 当前页数 Page_size 每页的条数 user
     * 使用方法：先判断当前页数是否为空，是则赋值1；查询用户表符合条件的总条数，计算出总页数
     */
    @Override
    public Pagination getBy(Integer currPage, Integer Page_size, User user) {
        if (currPage ==null)
            currPage=1;
        Pagination pagination = new Pagination();
        pagination.setCurrPage(currPage);
        pagination.setPAGE_SIZE(Page_size);
        try{
            pagination.setTotalCount(this.userMapper.selNum(user));
        }catch (Exception e){
            log.error(e.getMessage());
        }
        pagination.init();
        PageHelper.startPage(currPage,Page_size);
        try{
        pagination.setData(this.userMapper.getBy(user));
        }catch (Exception e){
            log.error(e.getMessage());
        }
        return pagination;
    }

    /**
     * 用途：新增用户
     * 参数: user
     * @return 成功则返回true
     */
    @Override
    public boolean addUser(User user) {
        userMapper.insert(user);
        return true;
    }

    /**
     * 用途：根据用户工号查询
     * 参数: user
     * @return 成功则返回所有查询数据
     * 使用方法：在新增时判断是否存在用户
     */
    @Override
    public User getById(User user) {
        return userMapper.selByJobNum(user);
    }

    /**
     * 用途：获取所有的用户名和工号，做新增时直属上级的下拉框
     * 参数:
     * @return 成功则返回所有数据
     */
    @Override
    public List<User> getAllSuperior() {
        return userMapper.selAllSuperior();

    }

    /**
     * 用途：获取所有的用户名和工号，做修改时直属上级的下拉框
     * 参数:
     * @return 成功则所有数据
     */
    @Override
    public List<User> getSuperior(User user) {
        return userMapper.selSuperior(user);
    }


    /**
     * 用途：批量删除用户
     * 参数: jobNum
     * @return 成功则返回true
     */
    @Override
    public boolean delete(String[] jobNum) {
        userMapper.delete(jobNum);
        return true;
    }


    /**
     * 用途：修改用户信息
     * 参数: user
     * @return 成功则返回true
     */
    @Override
    public boolean update(User user) {
        userMapper.update(user);
        return true;
    }


    /**
     * 用途：根据用户工号获取角色编号和角色名称
     * 参数: user
     * @return 成功则返回数据
     */
    @Override
    public User getRoleById(User user) {
        return userMapper.selRole(user);
    }

    /**
     * 用途：修改角色
     * 参数: user
     * @return 成功则返回true
     */
    @Override
    public boolean updateRole(User user) {
        userMapper.updateRole(user);
        return true;
    }

}
